#ifndef QUERYACCIDENTESFORMACION_H_
#define QUERYACCIDENTESFORMACION_H_

#include "Query.h"

class QueryAccidentesFormacion : public Query {
public:
	QueryAccidentesFormacion(){};
	virtual ~QueryAccidentesFormacion(){};

	void execute(ArbolUB<DIMENSION_CLAVES, CANTIDAD_BITS_CLAVES>& arbol, ParametroQuery* parametroQuery, std::string archivoSalida){
		std::cout << "Query Accidentes Formación " << archivoSalida << std::endl;
		std::ofstream arch;
		arch.open(archivoSalida);
		if (!arch.good()){
			std::cout << "No se pudo abrir archivo " << archivoSalida << std::endl;
			return;
		}

	    unsigned int anio = 0;
	    unsigned char mes = 0;
	    unsigned char dia = 0;
	    std::string rango ="";

    	Mapeador* mapeador = Mapeador::getInstance();

	    Point<DIMENSION_CLAVES>* min = parametroQuery->getMin();
	    Point<DIMENSION_CLAVES>* max = parametroQuery->getMax();

	    IteradorUB<DIMENSION_CLAVES, CANTIDAD_BITS_CLAVES> iterador(arbol, *min, *max);
	    std::set<std::string> accidentes;

	    auto func = [&accidentes, &mapeador](Point<DIMENSION_CLAVES> point){ accidentes.insert( mapeador->mapIdToString(point[3]) ); };
        iterador.start(func);
        std::string rangoInicial;
        int pos;
        arch << "Formacion: " << (*min)[4]; // guardo la formacion
        if ((*min)[1] != 0){
        	mapeador->recuperarRango((*min)[1], &anio, &mes, & dia, &rango);
        	pos = rango.find('-');
        	rangoInicial = rango.erase(pos, 8);
            arch << " Rango: " << rangoInicial << " " << (int)dia << "/" << (int)mes << "/" << anio; // guardo fecha si lo hay

            mapeador->recuperarRango((*max)[1], &anio, &mes, & dia, &rango);
        	pos = rango.find('-');
        	rangoInicial = rango.erase(pos, 8);
            arch << " - " << rangoInicial << " " << (int)dia << "/" << (int)mes << "/" << anio; // guardo fecha si lo hay

        }
        arch << std::endl;
	    for (auto it = accidentes.begin(); it != accidentes.end(); ++it)
	    	arch << *it << std::endl;

	    arch.close();
	}

};

#endif /*QUERYACCIDENTESFORMACION_H_*/
